================================================================================
                                样例使用说明
                             Sample Description
================================================================================
功能描述：
此样例演示了FreeRTOS信号量的相关API函数，实现二值信号量、计数型信号量和互斥信号
量三种信号量实验，通过串口log，观察三种信号量的实现过程。

Function descriptions:
This sample demonstrates the relevant API functions of FreeRTOS signals to 
implement three kinds of signaling experiments: binary signals, counting-type 
signals and mutually exclusive signals, and observes the implementation process 
of the three kinds of signals through the serial port log.

================================================================================
测试环境：
测试用板：PY32F040E_STK
MDK版本：5.28
IAR版本：9.20
GCC版本：GNU Arm Embedded Toolchain 10.3-2021.10

Test environment:
Test board: PY32F040E_STK
MDK Version: 5.28
IAR Version: 9.20
GCC Version: GNU Arm Embedded Toolchain 10.3-2021.10

================================================================================
使用步骤：
1. 编译下载程序到MCU，并运行；
2. 通过串口调试助手打印的log信息，观察任务执行过程。
3. 打开宏定义SEMAPHORE_BINRAY，关闭SEMAPHORE_COUNT和SEMAPHORE_MUTEX。
   Task1: 任务每隔2s释放一次二值信号量。
   Task2: 获取二值信号量，打印获取成功信息。获取失败则进入等待状态。
   Task3: 删除任务3。
4. 打开宏定义SEMAPHORE_COUNT，关闭SEMAPHORE_BINRAY和SEMAPHORE_MUTEX。
   Task1: 任务每隔2s释放一次计数型信号量。信号量总数加1。总数上限是50。
   Task2: 获取计数型信号量，打印获取成功信息。信号量总数减1。
   Task3: 删除任务3。
5. 打开宏定义SEMAPHORE_MUTEX，关闭SEMAPHORE_BINRAY和SEMAPHORE_COUNT。
   Task1: 任务每隔4s(3s delay延时 + 1s阻塞延时)获取和释放互斥信号量。
   Task2: 打印任务2运行log。
   Task3: 任务每隔1.5s(0.5s delay延时 + 1s阻塞延时)获取和释放互斥信号量。
   步骤5：是为了验证实现互斥信号量优先级继承功能。

Example execution steps:
1. Compile and download the program to the MCU and run it;
2. You can use the log information printed by the serial debugging assistant to 
observe the task execution process.
3. Open the define SEMAPHORE_BINRAY, close SEMAPHORE_COUNT and SEMAPHORE_MUTEX.
   Task1: The task releases a binary semaphore every 2s.
   Task2: Get a binary semaphore and print a success message. If the acquisition
          fails, the system enters the waiting state.
   Task3: Delete Task 3.
4. Open the define SEMAPHORE_COUNT, close SEMAPHORE_BINRAY and SEMAPHORE_MUTEX.
   Task1: The task releases a counting semaphore every 2s. Add 1 to the total 
          number of semaphores. The total number is capped at 50.
   Task2: Obtain the counting semaphore and print the obtaining success message. 
          Subtract 1 from the total semaphore.
   Task3: Delete Task 3.
5. Open the define SEMAPHORE_MUTEX, close SEMAPHORE_BINRAY and SEMAPHORE_COUNT.
   Task1: The task obtains and releases mutually exclusive semaphore every 4s
          (3s delay + 1s blocking delay).
   Task2: Print Task 2 Run log.
   Task3: The task acquires and releases mutually exclusive semaphore every 
          1.5s(0.5s delay + 1s blocking delay).
   Step 5: Is to verify the implementation of the MUtex priority inheritance 
           function.

================================================================================
注意事项：
如果需要使用按键:
StartKit版本为V2.0以下,需将StartKit.h中的StartKitVersion 2 注释掉，并打开
StartKitVersion 1
StartKit版本为V2.0及以上版本,则无需操作
通过USB转TTL模块连接PC与STK板,STK板与USB转TTL模块的连线方式如下；
@PrintfConfigStart
STK板        USB转TTL模块
PA02(TX)  -->  RX
PA03(RX)  -->  TX
GND       -->  GND
UART配置为波特率115200，数据位8，停止位1，校验位None
@PrintfConfigEnd

Notes:
If you need to use buttons:
StartKit version is below V2.0, you need to comment StartKitVersion 2 in
StartKit.h, and open StartKitVersion 1 
StartKit version is V2.0 and above, no operation is required
Connect the PC to the STK board through the USB to TTL module, and the connection
method between the STK board and the USB to TTL module is as follows:
@PrintfConfigStart
STK board USB to TTL module
PA02(TX)  -->  RX
PA03(RX)  -->  TX
GND       -->  GND
UART is configured as BaudRate 115200, data bit 8, stop bit 1, and parity None.
@PrintfConfigEnd
================================================================================
